In a distributed communications environment, resources may be shared among a plurality of the nodes of the distributed environment. In order to coordinate access to the shared resources, a distributed lock manager is used. The distributed lock manager includes, for instance, a layer of software that runs on each of the nodes of the environment.
The distributed lock manager uses at least one locking protocol to coordinate access to the shared resources. In one example, the locking protocol is a token-based protocol in which the distributed lock manager interfaces with a token server to obtain tokens, and then grants lock requests based on the granted tokens.
For example, when an application requests a lock of a resource, the local lock manager of the node in which the application is executing sends a request to the token server to acquire a corresponding token for the resource. Once the token is acquired, the lock manager can grant the requested lock. When the lock is released, the node retains the token so that subsequent lock requests for the same resource can be granted locally without requiring additional messages to the token server. The token server keeps track of which tokens are held by which nodes.
When the token server receives a request from a node for a token that is currently held by another node, the other node needs to relinquish its token before it can be granted to the requesting node. This is accomplished by having the lock manager of the requesting node send a revoke request to the node holding the token. In response to the revoke request, the node checks whether a lock requiring the token is currently held, waits for any such lock to be released, and then sends a message to the token server to relinquish the token.
The processes of acquiring and relinquishing tokens have traditionally used synchronous communications. That is, only one request associated with a particular token could be sent by a lock manager at any one time. Any other requests by that lock manager associated with that token needed to wait until a reply to the previous request was received. This use of synchronous communications increased message overhead causing greater message delays and greater overall message traffic.
Thus, a need exists for a capability that enables the use of messages other than synchronous messages to acquire and relinquish tokens. A further need exists for a capability that reduces message overhead.